/// 应用常量配置
class Constants {
  // ==================== API服务配置 ====================
  
  /// 主要API服务器地址
  /// Android模拟器使用 10.0.2.2 访问宿主机localhost
  /// 真机使用局域网IP，例如：http://192.168.1.100:8081  http://8.140.227.48
  // static const String apiBaseUrl = 'http://10.0.2.2:8081';
    static const String apiBaseUrl = 'http://8.140.227.48:8081';
  /// API服务器主机名（用于SSL检查等）
  static const String apiHost = '116.62.108.84';
  
  /// API服务器端口
  static const int apiPort = 8888;
  
  /// 备用API地址（如果需要）
  static const String apiUrlFallback = 'https://api.example.com';
  
  // ==================== 网络配置 ====================
  
  /// 默认连接超时时间（毫秒）
  static const int defaultConnectTimeout = 10000;
  
  /// 默认接收超时时间（毫秒）
  static const int defaultReceiveTimeout = 10000;
  
  /// 默认发送超时时间（毫秒）
  static const int defaultSendTimeout = 10000;
  
  /// 用户代理字符串
  static const String userAgent = 'Flutter-App/1.0.0';
  
  // ==================== DNS服务器 ====================
  
  /// Google公共DNS
  static const String googleDns = '8.8.8.8';
  
  /// 百度公共DNS
  static const String baiduDns = '114.114.114.114';
  
  // ==================== 测试域名 ====================
  
  /// 用于DNS解析测试的域名列表
  static const List<String> testDomains = [
    'baidu.com',
    'google.com',
    'shiguangbiaoju.com',
  ];

  // ==================== 本地存储键常量 ====================
  
  /// 深色模式设置键
  static const String storageKeyDarkMode = 'dark_mode';
  
  /// 语言设置键
  static const String storageKeyLanguage = 'language';
  
  /// 首次运行标记键
  static const String storageKeyFirstRun = 'first_run';
  
  /// 应用版本存储键
  static const String storageKeyAppVersion = 'app_version';

  // ==================== 用户服务存储键常量 ====================
  
  /// 用户访问令牌存储键
  static const String storageKeyUserToken = 'user_token';
  
  /// 用户刷新令牌存储键
  static const String storageKeyRefreshToken = 'refresh_token';
  
  /// 完整Token模型存储键
  static const String storageKeyTokenModel = 'token_model';
  
  /// 用户ID存储键（存储数字ID的字符串形式，如："1"）
  static const String storageKeyUserId = 'user_id';
  
  /// 用户名存储键
  static const String storageKeyUsername = 'username';
  
  /// 专家信息存储键
  static const String storageKeyExpertInfo = 'expert_info';
  
  /// 最后登录时间存储键
  static const String storageKeyLastLoginTime = 'last_login_time';

  // ==================== HTTP请求头常量 ====================
  
  /// HTTP Content-Type 头
  static const String httpHeaderContentType = 'Content-Type';
  
  /// HTTP Accept 头
  static const String httpHeaderAccept = 'Accept';
  
  /// HTTP User-Agent 头
  static const String httpHeaderUserAgent = 'User-Agent';
  
  /// HTTP Authorization 头
  static const String httpHeaderAuthorization = 'Authorization';
  
  /// HTTP X-Request-ID 头
  static const String httpHeaderRequestId = 'X-Request-ID';
  
  /// JSON Content-Type 值
  static const String httpContentTypeJson = 'application/json; charset=utf-8';
  
  /// JSON Accept 值
  static const String httpAcceptJson = 'application/json';
  
  /// Bearer 令牌前缀
  static const String httpBearerPrefix = 'Bearer ';

  // ==================== 错误代码常量 ====================
  
  /// SSL证书错误代码
  static const String errorCodeSsl = 'SSL_ERROR';
  
  /// 未授权状态码
  static const int httpStatusUnauthorized = 401;
  
  /// HTTP状态码范围上限
  static const int httpStatusMaxValid = 600;

  // ==================== 时间/过期相关常量 ====================
  
  /// 默认访问令牌过期时间（秒）- 1小时
  static const int defaultAccessTokenExpiresIn = 3600;
  
  /// 默认刷新令牌过期时间（秒）- 1天
  static const int defaultRefreshTokenExpiresIn = 86400;
  
  /// 假设令牌获取时间偏移（毫秒）- 用于向后兼容
  static const int fallbackTokenObtainedOffset = 3300000;
  
  /// 登录信息过期天数
  static const int loginExpirationDays = 30;

  // ==================== 默认值常量 ====================
  
  /// 默认语言代码
  static const String defaultLanguage = 'zh_CN';
  
  /// 未知值占位符
  static const String unknownValue = 'Unknown';
  
  /// 未知应用名称
  static const String unknownAppName = 'Unknown App';
  
  /// 默认包名
  static const String defaultPackageName = 'com.example.unknown';
  
  /// 默认版本号
  static const String defaultVersion = '1.0.0';
  
  /// 默认构建号
  static const String defaultBuildNumber = '1';
  
  /// 默认应用名称
  static const String defaultAppName = 'Flutter App';
  
  /// 标准项目应用名称
  static const String standardProjectAppName = 'Flutter Standard Project';

  // ==================== API路径模式常量 ====================
  
  /// 刷新令牌API路径模式，通过 contains() 方法进行模糊匹配
  static const String apiPathRefreshPattern = '/refreshToken';
  
  /// 不需要认证token的API路径列表（白名单）
  /// 
  /// 🎯 用途：
  /// - DioService会自动检查请求路径是否在此列表中
  /// - 如果在列表中，则不会添加Authorization头，也不会进行token检查
  /// 
  /// 📝 匹配规则：
  /// - 精确匹配：'/auth/login' 只匹配 '/auth/login'
  /// - 前缀匹配：'/public/' 匹配所有以 '/public/' 开头的路径
  /// 
  /// 🚨 注意：
  /// - 以 '/' 结尾的路径表示前缀匹配
  /// - 其他路径表示精确匹配
  static const List<String> noAuthRequiredPaths = [
    '/v1/auth/login',          // 用户登录
    '/v1/auth/register',       // 用户注册  
    '/v1/auth/logout',         // 用户登出
    '/v1/auth/refreshToken',   // 刷新令牌
    '/auth/captcha',           // 获取验证码
    '/auth/forgot-password',   // 忘记密码
    '/auth/reset-password',    // 重置密码
    '/public/',                // 公开API（使用前缀匹配）
    '/open/',                  // 开放API（使用前缀匹配）
  ];

  // ==================== 权限服务常量 ====================
  
  /// 权限服务标签
  static const String permissionServiceTag = 'PermissionService';
}
